package com.beantools.annotation.handler;

import com.beantools.execption.HandlerException;

import java.util.Collection;

/**
 * 这是处理<code>{@link com.beantools.annotation.NotNull}</code>注解的处理器。
 * <p>
 * 如果<code>NotNull</code>设置在类上面，其默认判断当前类的属性不能为空.还需判断其中的关键字
 * <code>ignore</code>是否生效。如果关键字<code>ignore</code>是生效的，则某些属性可以为
 * <code>null</code>。如果关键字<code>including</code>如果<code>NotNull</code>设置在属性或
 * 方法上。则该属性可以为<code>null</code>。
 * <p>
 * 如果<code>IncludingSupClass</code>设置在当前类上，则其父类的属性不能为空
 *
 * @author baooya
 * @version 1.0
 * @since 1.1.0
 */
public interface AnnotationHandler<T> {

    /**
     * 这是接受一个对象的方法，如果对象<code>object</code>合乎调用者的要求，则直接返回true
     * 否则，返回false
     *
     * @param object 泛型的实例化对象
     * @return true|false
     * @throws HandlerException
     */
    void validate(T object) throws HandlerException;

    /**
     * 这是接受一个对象数组的方法，如果对象<code>object</code>合乎调用者的要求，则直接返回true
     * 否则，返回false
     *
     * @param objects 泛型的实例化对象
     * @return true|false
     * @throws HandlerException
     */
    void validate(T[] objects) throws HandlerException;


    /**
     * 这是接受一个对象容器的方法，如果对象<code>object</code>合乎调用者的要求，则直接返回true
     * 否则，返回false
     *
     * @param collection 泛型的实例化对象
     * @return true|false
     * @throws HandlerException
     */
    void validate(Collection<T> collection) throws HandlerException;
}
